/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package juego;

/**
 *
 * @author VIC
 */

abstract class Militar extends Construccion implements IasignarTrabajo{

	private int estado;
	private int tiempoInicio;


        public abstract char getSimbolo();

	public Militar(){
		estado = -1;
		tiempoInicio = 0;
	}

	public abstract void mostrar();

	public abstract void recolectar();

	public int getEstado(){return estado;}
	public int getTiempoInicial(){return tiempoInicio;}
	public void setEstado(int i){estado = i;}
	public void setTiempoInicio(int i){estado = i;}
         static public void mostrarMilitar(){
            System.out.println("[1] Cuartel: oro = " + Cuartel.precio[0] + "  plata = " + Cuartel.precio[1] + "  madera = " + Cuartel.precio[2] + "  petroleo = " + Cuartel.precio[3]);
            System.out.println("[2] Astillero: oro = " + Astillero.precio[0] + "  plata = " + Astillero.precio[1] + "  madera = " + Astillero.precio[2] + "  petroleo = " + Astillero.precio[3]);
            System.out.println("[3] Hangar: oro = " + Hangar.precio[0] + "  plata = " + Hangar.precio[1] + "  madera = " + Hangar.precio[2] + "  petroleo = " + Hangar.precio[3]);
        }
}

class Cuartel extends Militar {
	private static int longx=2;
	private static int longy=2;
        public static UnidadMilitar[] ArrTerrestres;
	public static int[] precio = {100, 0, 20, 0};
        private char simbolo= 'C';
        
        public char getSimbolo(){
            return simbolo;
        }
   
	static{
		ArrTerrestres = new UnidadMilitar[3];
		ArrTerrestres[0] = new UnidadMilitar('1',"Soldado Razo", 100, 0, 10, 0, 1, 3, 10, 5, "Canhon", "Helicoptero", "Porta Aviones");
		ArrTerrestres[1] = new UnidadMilitar('2',"Tanque Blindado", 300, 100, 50, 10, 15, 6, 30, 20, "Soldado Razo", "Avion Caza", "Canhonera");
		ArrTerrestres[2] = new UnidadMilitar('3',"Canhon", 200, 20, 10, 5, 6, 4, 20, 15, "Tanque Blindado", "Bombardero", "Barco Acorazado");
	}

	public Cuartel(){
		super();
	}

	public void mostrar(){
		for(int i = 0; i < 3; i++){
			System.out.println(i + ").................");
			ArrTerrestres[i].imprimir();
			System.out.println();
		}
	}

	public void asignarTrabajo(int indice){
		setEstado(indice);
		setTiempoInicio(Juego.turno);
		Juego.gold = Juego.gold - precio[0];
		Juego.silver = Juego.silver - precio[1];
		Juego.madera = Juego.madera - precio[2];
		Juego.petroleo = Juego.petroleo - precio[3];
	}

	public void recolectar(){
		setEstado(-1);
		setTiempoInicio(0);
	}
        public int getDuracion(){
            return ArrTerrestres[getEstado()].getDuracion();
        }
        public static int getLongx(){
	    return longx;
	}

	public static int getLongy(){
	    return longy;
	}
}





class Astillero extends Militar{
	private static int longx=3;
	private static int longy=2;
	public static UnidadMilitar[] ArrAereos;
	public static int[] precio = {200, 10, 50, 20};
        private char simbolo = 'A';
	static{
		ArrAereos = new UnidadMilitar[3];
		ArrAereos[0] = new UnidadMilitar('4',"Avion Caza", 0, 0, 0, 0, 0, 0, 0, 0, "", "", "");
		ArrAereos[1] = new UnidadMilitar('5',"Helicoptero", 0, 0, 0, 0, 0, 0, 0, 0, "", "", "");
		ArrAereos[2] = new UnidadMilitar('6',"Bombardero", 0, 0, 0, 0, 0, 0, 0, 0, "", "", "");
	}

        public char getSimbolo(){
            return simbolo;
        }
         
	public Astillero(){
		super();
	}

	public void mostrar(){
		for(int i = 0; i < 3; i++){
			System.out.println(i + ").................");
			ArrAereos[i].imprimir();
			System.out.println();
		}
	}

	public void asignarTrabajo(int indice){
		setEstado(indice);
		setTiempoInicio(Juego.turno);
		Juego.gold = Juego.gold - precio[0];
		Juego.silver = Juego.silver - precio[1];
		Juego.madera = Juego.madera - precio[2];
		Juego.petroleo = Juego.petroleo - precio[3];
	}

	public void recolectar(){
		setEstado(-1);
		setTiempoInicio(0);
	}
        public int getDuracion(){
            return ArrAereos[getEstado()].getDuracion();
        }
        public static int getLongx(){
	    return longx;
	}

	public static int getLongy(){
	    return longy;
	}
}





class Hangar extends Militar {
	private static int longx=3;
	private static int longy=3;
	public static UnidadMilitar[] ArrMaritimos;
	public static int[] precio = {300, 15, 100, 50};
        private char simbolo = 'H';
        
        public char getSimbolo(){
            return simbolo;
        }

	static{
		ArrMaritimos = new UnidadMilitar[3];
		ArrMaritimos[0] = new UnidadMilitar('7',"Canhonera", 0, 0, 0, 0, 0, 0, 0, 0, "", "", "");
		ArrMaritimos[1] = new UnidadMilitar('8',"Porta Aviones", 0, 0, 0, 0, 0, 0, 0, 0, "", "", "");
		ArrMaritimos[2] = new UnidadMilitar('9',"Avion Acorazado", 0, 0, 0, 0, 0, 0, 0, 0, "", "", "");
	}


	public Hangar(){
		super();
	}

	public void mostrar(){
		for(int i = 0; i < 3; i++){
			System.out.println(i + ").................");
			ArrMaritimos[i].imprimir();
			System.out.println();
		}
	}

	public void asignarTrabajo(int indice){
		setEstado(indice);
		setTiempoInicio(Juego.turno);
		Juego.gold = Juego.gold - precio[0];
		Juego.silver = Juego.silver - precio[1];
		Juego.madera = Juego.madera - precio[2];
		Juego.petroleo = Juego.petroleo - precio[3];
	}

	public void recolectar(){
		setEstado(-1);
		setTiempoInicio(0);


	}

        public int getDuracion(){
            return ArrMaritimos[getEstado()].getDuracion();
        }
        public static int getLongx(){
	    return longx;
	}

	public static int getLongy(){
	    return longy;
	}
        public int [] getPrecio(){
		int []aux=new int [precio.length];
		for(int i=0;i<precio.length;i++) aux[i]=precio[i];
		return aux;
	}
       
}

///Creo que esta weada hereda de otra clase, no en Militar GG
//class Laboratorio_de_mejoras extends militar{}






class UnidadMilitar{
	private int [] precio;
	private String nombre;
	private int nivel;
	private int duracion;
	//private int tiempoInicio;
	//private boolean estado;
	private int vida;
	private int ataque;
	private String[] contra;
        private char simbolo;

	public UnidadMilitar(char simbolo, String nombre, int oro, int plata, int madera, int petroleo, int nivel, int duracion, int vida,
				    int ataque, String contra1, String contra2, String contra3){
		precio = new int[4];
		precio[0] = oro;
		precio[1] = plata;
		precio[2] = madera;
		precio[3] = petroleo;

		this.nombre = nombre;
		this.nivel = nivel;
		this.duracion = duracion;
		this.vida = vida;
		this.ataque = ataque;
		//this.tiempoInicio = 0;
		//this.estado = true;
		contra = new String[3];
		contra[0] = contra1;
		contra[1] = contra2;
		contra[2] = contra3;
	}

        public char getSimbolo(){
            return simbolo;
        }
	public int[] getPrecio(){
		int[] a = new int[4];
		for(int i = 0; i < 4; i++)
			a[i] = precio[i];
		return a;
	}
	public String getNombre(){return nombre;}
	public int getNivel(){return nivel;}
	public int getDuracion(){return duracion;}
	//public int getTiempoInicio(){return tiempoInicio;}
	//public boolean getEstado(){return estado;}
	public int getVida(){return vida;}
	public int getAtaque(){return ataque;}
	public String[] getContra(){
		String[] a = new String[3];
		a[0] = contra[0];
		a[1] = contra[1];
		a[2] = contra[2];
		return a;
	}

	public void imprimir(){
		System.out.println("Nombre: " + nombre);
		System.out.println("Precio:  Oro = " + precio[0] + "   Plata = " + precio[1] + "   Madera = " + precio[2] + "   Petroleo: " + precio[3]);
		System.out.println("Duracion: " + duracion);
		System.out.println("Vida: " + vida);
		System.out.println("Ataque: " + ataque);
		System.out.println("Bueno contra los tipos: " + contra[0] + ", " + contra[1] + " y " + contra[2]);
	}

}
